/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package conversormonedasrmi;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.text.DecimalFormat;

/**
 *
 * @author Johann Pando.
 */
public class MetodosConversion extends UnicastRemoteObject
        implements IMetodosConversion {

    private static final double TASACAMBIOEURODOLAR = 1.37;
    private static final double TASACAMBIOEUROPESETA = 166;//166.386
    private static final double TASACAMBIOEUROLIBRA = 0.838;
    private static final double TASACAMBIODOLAREURO = 0.73;
    private static final double TASACAMBIODOLARPESETA = 113.175;
    private static final double TASACAMBIODOLARLIBRA = 0.612;
    private static final double TASACAMBIOLIBRAEURO = 1.193;
    private static final double TASACAMBIOLIBRADOLAR = 1.635;
    private static final double TASACAMBIOLIBRAPESETA = 182.024;
    private static final String EURO = "Euros(s)";
    private static final String DOLAR = "Dólar(es)";
    private static final String PESETA = "Peseta(s)";
    private static final String LIBRA = "Libra(s)";
    private static final String ESPACIO = " ";
    private static final String DOSDECIMALES = "#.##";

    public MetodosConversion() throws RemoteException {
        super();
    }

    /**
     * M&eacute;todo que recibe una cantidad en euros e imprimirá su cambio en
     * d&oacute;lares.
     *
     * @param cantidadOriginal
     */
    @Override
    public String convierteEuroToDolar(double cantidadOriginal)
            throws RemoteException {
        double resultadoCambio = cantidadOriginal * TASACAMBIOEURODOLAR;
        return imprimeConversion(resultadoCambio, cantidadOriginal,
                TASACAMBIOEURODOLAR, EURO, DOLAR);

    }

    /**
     * M&eacute;todo que recibe una cantidad en euros e imprimirá su cambio en
     * pesetas.
     *
     * @param cantidadOriginal
     * @return
     */
    @Override
    public String convierteEuroToPeseta(double cantidadOriginal)
            throws RemoteException {
        double resultadoCambio = cantidadOriginal * TASACAMBIOEUROPESETA;
        return imprimeConversion(resultadoCambio, cantidadOriginal,
                TASACAMBIOEUROPESETA, EURO, PESETA);
    }

    /**
     * M&eacute;todo que recibe una cantidad en euros e imprimirá su cambio en
     * Libras.
     *
     * @param cantidadOriginal
     * @return
     */
    @Override
    public String convierteEuroToLibra(double cantidadOriginal)
            throws RemoteException {
        double resultadoCambio = cantidadOriginal * TASACAMBIOEUROLIBRA;
        return imprimeConversion(resultadoCambio, cantidadOriginal,
                TASACAMBIOEUROLIBRA, EURO, LIBRA);
    }

    /**
     * M&eacute;todo que recibe una cantidad en D&oacute;res e imprimirá su
     * cambio en Euros.
     *
     * @param cantidadOriginal
     * @return
     */
    @Override
    public String convierteDolarToEuro(double cantidadOriginal)
            throws RemoteException {
        double resultadoCambio = cantidadOriginal * TASACAMBIODOLAREURO;
        return imprimeConversion(resultadoCambio, cantidadOriginal,
                TASACAMBIODOLAREURO, DOLAR, EURO);
    }

    /**
     * M&eacute;todo que recibe una cantidad en D&oacute;res e imprimirá su
     * cambio en Pesetas.
     *
     * @param cantidadOriginal
     * @return
     */
    @Override
    public String convierteDolarToPeseta(double cantidadOriginal)
            throws RemoteException {
        double resultadoCambio = cantidadOriginal * TASACAMBIODOLARPESETA;
        return imprimeConversion(resultadoCambio, cantidadOriginal,
                TASACAMBIODOLARPESETA, DOLAR, PESETA);
    }

    /**
     * M&eacute;todo que recibe una cantidad en D&oacute;res e imprimirá su
     * cambio en Libras.
     *
     * @param cantidadOriginal
     * @return
     */
    @Override
    public String convierteDolarToLibra(double cantidadOriginal)
            throws RemoteException {
        double resultadoCambio = cantidadOriginal * TASACAMBIODOLARLIBRA;
        return imprimeConversion(resultadoCambio, cantidadOriginal,
                TASACAMBIODOLARLIBRA, DOLAR, LIBRA);
    }

    /**
     * M&eacute;todo que recibe una cantidad en Libras e imprimirá su cambio en
     * Euros.
     *
     * @param cantidadOriginal
     * @return
     */
    @Override
    public String convierteLibraToEuro(double cantidadOriginal)
            throws RemoteException {
        double resultadoCambio = cantidadOriginal * TASACAMBIOLIBRAEURO;
        return imprimeConversion(resultadoCambio, cantidadOriginal,
                TASACAMBIOLIBRAEURO, LIBRA, EURO);
    }

    /**
     * M&eacute;todo que recibe una cantidad en Libras e imprimirá su cambio en
     * Dólares.
     *
     * @param cantidadOriginal
     * @return
     */
    @Override
    public String convierteLibraToDolar(double cantidadOriginal)
            throws RemoteException {
        double resultadoCambio = cantidadOriginal * TASACAMBIOLIBRADOLAR;
        return imprimeConversion(resultadoCambio, cantidadOriginal,
                TASACAMBIOLIBRADOLAR, LIBRA, DOLAR);
    }

    /**
     * M&eacute;todo que recibe una cantidad en Libras e imprimirá su cambio en
     * Pesetas.
     *
     * @param cantidadOriginal
     * @return
     */
    @Override
    public String convierteLibraToPeseta(double cantidadOriginal)
            throws RemoteException {
        double resultadoCambio = cantidadOriginal * TASACAMBIOLIBRAPESETA;
        return imprimeConversion(resultadoCambio, cantidadOriginal,
                TASACAMBIOLIBRAPESETA, LIBRA, PESETA);
    }

    /**
     * M&eacute;todo que imprime un cantidad a cambiar y la cantidad convertida
     * a partir de los siguientes par&aacute;metros:
     *
     * @param resultadoCambio
     * @param cantidadOriginal
     * @param tasaCambio
     * @param monedaOriginal
     * @param monedaConvertir
     */
    private String imprimeConversion(double resultadoCambio,
            double cantidadOriginal, double tasaCambio,
            String monedaOriginal, String monedaConvertir) {

        DecimalFormat df = new DecimalFormat(DOSDECIMALES);

        StringBuilder resultado = new StringBuilder();
        resultado.append(cantidadOriginal).append(ESPACIO)
                .append(monedaOriginal).append(" son ")
                .append(df.format(resultadoCambio))
                .append(ESPACIO).append(monedaConvertir)
                .append("\nLa tasa de cambio es: ")
                .append(tasaCambio).append("\n");

        /*System.out.printf(cantidadOriginal + " "
         + monedaOriginal + " son " + "%1$.2f" + " "
         + monedaConvertir + "\nLa tasa de cambio es: "
         + tasaCambio + "\n", resultadoCambio);
         System.out.println("La tasa de cambio es: " + tasaCambio + "\n");*/
        return resultado.toString();
    }
}
